A complex virtual machine system may include several clusters of individual host computers (hosts) with each host supporting hundreds of virtual machines (VMs). The virtual machine network can undergo many user-initiated or automatic changes such as, for example, adding or removing VMs and hosts to the network during routine operation and maintenance or hosts failing during normal operation. However, network managers want to be assured that such changes will not disrupt pre-established performance guarantees. Performance guarantees can be difficult to achieve after the changes unless properties of the VMs can be controlled or predicted after the changes are made.
Control or predictability of VM properties is typically ensured by reserving a fixed amount of resources for each VM in a cluster within the virtual machine network. However, reserving resources for each VM can be tedious and, if not continuously managed, ineffective. Furthermore, resource reservations that cannot be violated greatly hinder the ability of a cluster to react to changes in the network. For example, if a host fails, some VMs may not be able to restart if insufficient resources are available to satisfy resource reservations despite the availability of sufficient resources to support the VMs. Thus, there is a need for a way to guarantee VM performance while allowing various user-initiated changes to be implemented.